#ifndef _Type_h
#define _Type_h

#include "CxxUtils.h"
#include "LangUtils.h"

class DoOpType
{
public: 
	class ds_type : public _DoOperator
	{
	protected: 
		ds_type(const ds_type &);
		ds_type& operator=(const ds_type &);
	public: 
		ds_type() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_cvlit : public _DoOperator
	{
	protected: 
		ds_cvlit(const ds_cvlit &);
		ds_cvlit& operator=(const ds_cvlit &);
	public: 
		ds_cvlit() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_cvx : public _DoOperator
	{
	protected: 
		ds_cvx(const ds_cvx &);
		ds_cvx& operator=(const ds_cvx &);
	public: 
		ds_cvx() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_xcheck : public _DoOperator
	{
	protected: 
		ds_xcheck(const ds_xcheck &);
		ds_xcheck& operator=(const ds_xcheck &);
	public: 
		ds_xcheck() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_executeonly : public _DoOperator
	{
	protected: 
		ds_executeonly(const ds_executeonly &);
		ds_executeonly& operator=(const ds_executeonly &);
	public: 
		ds_executeonly() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_noaccess : public _DoOperator
	{
	protected: 
		ds_noaccess(const ds_noaccess &);
		ds_noaccess& operator=(const ds_noaccess &);
	public: 
		ds_noaccess() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_readonly : public _DoOperator
	{
	protected: 
		ds_readonly(const ds_readonly &);
		ds_readonly& operator=(const ds_readonly &);
	public: 
		ds_readonly() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_rcheck : public _DoOperator
	{
	protected: 
		ds_rcheck(const ds_rcheck &);
		ds_rcheck& operator=(const ds_rcheck &);
	public: 
		ds_rcheck() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_wcheck : public _DoOperator
	{
	protected: 
		ds_wcheck(const ds_wcheck &);
		ds_wcheck& operator=(const ds_wcheck &);
	public: 
		ds_wcheck() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_cvi : public _DoOperator
	{
	protected: 
		ds_cvi(const ds_cvi &);
		ds_cvi& operator=(const ds_cvi &);
	public: 
		ds_cvi() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_cvn : public _DoOperator
	{
	protected: 
		ds_cvn(const ds_cvn &);
		ds_cvn& operator=(const ds_cvn &);
	public: 
		ds_cvn() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_cvr : public _DoOperator
	{
	protected: 
		ds_cvr(const ds_cvr &);
		ds_cvr& operator=(const ds_cvr &);
	public: 
		ds_cvr() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_cvrs : public _DoOperator
	{
	protected: 
		ds_cvrs(const ds_cvrs &);
		ds_cvrs& operator=(const ds_cvrs &);
	public: 
		ds_cvrs() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_cvs : public _DoOperator
	{
	protected: 
		ds_cvs(const ds_cvs &);
		ds_cvs& operator=(const ds_cvs &);
	public: 
		ds_cvs() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	static void push(_DoDictionaryMultimap& dict) {
		dict.put(CRefPtr< _DoObject >(new DoName("type")), CRefPtr< _DoObject >(new ds_type()));
		dict.put(CRefPtr< _DoObject >(new DoName("cvlit")), CRefPtr< _DoObject >(new ds_cvlit()));
		dict.put(CRefPtr< _DoObject >(new DoName("cvx")), CRefPtr< _DoObject >(new ds_cvx()));
		dict.put(CRefPtr< _DoObject >(new DoName("xcheck")), CRefPtr< _DoObject >(new ds_xcheck()));
		dict.put(CRefPtr< _DoObject >(new DoName("executeonly")), CRefPtr< _DoObject >(new ds_executeonly()));
		dict.put(CRefPtr< _DoObject >(new DoName("noaccess")), CRefPtr< _DoObject >(new ds_noaccess()));
		dict.put(CRefPtr< _DoObject >(new DoName("readonly")), CRefPtr< _DoObject >(new ds_readonly()));
		dict.put(CRefPtr< _DoObject >(new DoName("rcheck")), CRefPtr< _DoObject >(new ds_rcheck()));
		dict.put(CRefPtr< _DoObject >(new DoName("wcheck")), CRefPtr< _DoObject >(new ds_wcheck()));
		dict.put(CRefPtr< _DoObject >(new DoName("cvi")), CRefPtr< _DoObject >(new ds_cvi()));
		dict.put(CRefPtr< _DoObject >(new DoName("cvn")), CRefPtr< _DoObject >(new ds_cvn()));
		dict.put(CRefPtr< _DoObject >(new DoName("cvr")), CRefPtr< _DoObject >(new ds_cvr()));
		dict.put(CRefPtr< _DoObject >(new DoName("cvrs")), CRefPtr< _DoObject >(new ds_cvrs()));
		dict.put(CRefPtr< _DoObject >(new DoName("cvs")), CRefPtr< _DoObject >(new ds_cvs()));
	}
};

#endif
